package com.apache.tools;

import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * 唯一标识编号生成工具类（采用UUID方式）
 * @Description 标准的UUID格式为：xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12)，其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。
 * @date  2011-12-13
 * @author hexin
 */
public class UUIDUtil {

	private static UniqueGenerate idWorker = new UniqueGenerate(0, 0);

	/**
	 * 获取标准的UUID序列
	 * @return 返回字符串格式为：xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12)
	 * 每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字
	 */
	public static final String getUUID() {
		UUID uuid = UUID.randomUUID();
		String str = uuid.toString();
		return str;
	}

	/**
	 * 获取标准的UUID序列
	 * @param replaceStr 指定序列中“-”字符被替换的值，默认/null 时 替换成空格
	 * @param len 指定返回字符串的长度，最大长度36
	 * @return 返回满足条件的字符串
	 */
	public static String getUUID(String replaceStr, int len) {
		String str = UUIDUtil.getUUID();
		String retStr = "";
		if (replaceStr != null && !"".equals(replaceStr.trim())) {
			retStr = str.replaceAll("-", replaceStr);
		} else {
			retStr = str.replaceAll("-", "");
		}
		return retStr.substring(0, len);
	}

	/**
	 * 雪花算法获取唯一ID
	 */
	public static String generateId() {
		return  "pk"+idWorker.nextId();
	}

	/**
	 * 雪花算法获取唯一ID
	 */
	public static long primaryId() {
		return  idWorker.nextId();
	}

	/**
	 * 生成纯数字主键（21位)
	 */
	public static String getPrimaryKey(){
		StringBuilder pkId = new StringBuilder();
		String trandNo = String.valueOf((Math.random() * 9 + 1) * 1000000);
		pkId.append(DateUtils.format(new Date(),"yyyyMMddHHmmssSSS"));
		pkId.append(trandNo.substring(0, 4));
		return pkId.toString();
	}
	/**
	 * 生成随机数
	 * @param type 1 数字 2 字母 3 数字+字母
	 * @param maxNum 位数
	 * @param choice 字母大小写--》如果type为1和3的时候使用  （65大写97L小写）
	 * @return
	 */
	public static String getRandomStr(String type, int maxNum, int choice) {
		String str = "";
		Random random = new Random();
		for (int i = 0; i < maxNum; i++) {
			//纯数字
			if (type.equals("1")) {
				str += String.valueOf(random.nextInt(10));
			} else if (type.equals("2")) {//纯字母
				str += (char) (choice + random.nextInt(26));
			} else if (type.equals("3")) {//数字和字母
				boolean b = random.nextBoolean();
				if (b) {//字符串
					str += (char) (choice + random.nextInt(26));
				} else {//数字
					str += String.valueOf(random.nextInt(10));
				}
			} else {//默认为数字
				str += String.valueOf(random.nextInt(10));
			}
		}
		if(str.startsWith("0")){
			StringBuffer sb = new StringBuffer(str);
			sb.replace(0,1,"1");
			return sb.toString();
		}else {
			return str;
		}
	}

}
